package ex2.LinkedAndArray;

import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;

/*
从磁盘读取一个文件， 这个文件有两个数字。
	从文件中读入数字1，  插入到链表第 5 位，并打印所有数字，和元素的总数。 保留这个链表，继续下面的操作。
	从文件中读入数字2， 插入到链表第 0 位，并打印所有数字，和元素的总数。 保留这个链表，并继续下面的操作。
	从链表中删除刚才的数字1.  并打印所有数字和元素的总数。

签入所有代码。
 */
public class ex2 {
    Point head;
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        int[] nums = new int[11];
        int nGuoKai = 0;
        System.out.println("请输入数字：");
        String a = scanner.nextLine();

        ex2 list = new ex2();
        String[] text= a.split(" ");

        for (int x = 0;x < text.length;x++)
        {
            nums[x] = Integer.valueOf(text[x]);

        }

        for (int x = 0;x < text.length;x++)
        {
            Point node = new Point(nums[x]);
            list.add(node);
            nGuoKai++;
        }

        System.out.println("链表：");
        list.PrintLinkedList();
        System.out.println();
        System.out.println("个数：" + nGuoKai);

        // 从文件中读取数字。
        File file = new File("D:\\IdeaProjects\\GK20172301_JavaProgramming\\src\\ex2\\LinkedAndArray\\sort.txt");
        FileReader fileReader = new FileReader(file);
        BufferedReader R1 = new BufferedReader(fileReader);
        String str = "";
        str = R1.readLine();
        fileReader.close();


        StringTokenizer tokenizer = new StringTokenizer(str);
        int[] numbers = new int[tokenizer.countTokens()];
        int y = 0;
//        nGuoKai += tokenizer.countTokens();
        while (tokenizer.hasMoreTokens()) {
            numbers[y] = Integer.parseInt(tokenizer.nextToken());
            y++;
        }

        int p = numbers[0];
        Point p1 = new Point(p);
        int q = numbers[1];
        Point q1 = new Point(q);

        // 在第五位插入p
        list.Insert(5,p1);
        System.out.println("在第五位插入文件中第一个数：");
        list.PrintLinkedList();
        nGuoKai++;
        System.out.println("个数：" + nGuoKai);
        System.out.println();

        // 在第零位插入q
        list.Insert(0,q1);
        System.out.println("在第零位插入文件中第二个数：");
        list.PrintLinkedList();
        nGuoKai++;
        System.out.println("个数：" + nGuoKai);
        System.out.println();

        // 删除插入的p
        list.DeleteNode(p1);
        System.out.println("删除插入的第一个数：");
        list.PrintLinkedList();
        nGuoKai--;
        System.out.println("个数：" + nGuoKai);
        System.out.println();


//
//        for (int x=0; x<nums.length; x++) {
//            result += nums[x] + " ";
//        }


    }

    public void PrintLinkedList()
    {
        Point node = head;
        while (node != null)
        {
            System.out.print(node.number + " ");
            node = node.next;
        }
    }

    public void add(Point element) {
        if ( head == null)
            head = element;
        else {
            Point temp = head;
            while (temp.next != null) {
                temp = temp.next;
            }
            temp.next = element;
        }

    }

    public void Insert(int x, Point element)
    {
        Point temp = head;
        if (x == 0)
        {
            element.next = head;
            head = element;
        }
        else {
            for (int y = 1; y < x - 1; y++) {
                temp = temp.next;
            }
            element.next = temp.next;
            temp.next = element;
        }
    }

    public void DeleteNode(Point element)
    {
        Point ProNode = head, CurrentNode = head;
        while (CurrentNode != null)
        {
            if(CurrentNode.number != element.number)
            {
                ProNode = CurrentNode;
                CurrentNode = CurrentNode.next;
            }
            else{
                break;
            }
        }
        ProNode.next = CurrentNode.next;
    }
}
